SET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS OFF
GO
/*
	CALCULAR LA ANTIGUEDAD DE UN AGENTE (DESDE / HASTA) EN DIAS HABILES Y NO HABILES.
*/

CREATE PROCEDURE [dbo].[paCalcularAntiguedadDelAgenteEnHoras]
@Agente int,
@Desde datetime,
@Hasta datetime,
@Res int output
 AS
SET NOCOUNT ON
set dateformat dmy

declare @dw1 int
declare @dw2 int
declare @dh int

declare @PA datetime
declare @PB datetime
declare @FA datetime
declare @FB datetime
declare @Baja varchar(1)
declare @Licencia int
declare @Resultado int
declare @DiasHabiles int
declare @meses int
declare @anios int

declare Subservicios cursor forward_only  for 
Select ss.FechaAlta, ss.FechaBaja, ss.Baja, Licencia from tb_SubserviciosAgentes ss, tb_ServiciosAgentes s
where s.agente = @Agente and  (ss.FechaBaja Is Null or ss.FechaBaja>=@Desde) and ss.FechaAlta<=@Hasta 
and s.idServicioAgente = ss.ServicioAgente
Order by ss.FechaAlta
FOR READ ONLY

Select @PA = @Desde, @PB=@Desde, @Resultado=0, @diashabiles=0

OPEN SubServicios

fetch next from SubServicios into @FA, @FB, @Baja,@Licencia

while @@fetch_status = 0
begin
	if (Select CuentaAntGral from tb_Licencias where idLicencia = @Licencia) = 'S' Or (Select CuentaAntGral from tb_Licencias where idLicencia = @Licencia) Is Null
		begin
		if @baja = 'N' or @FB > @Hasta
			Select @FB = @Hasta
		if @FA>@PB
			begin
			Select @Resultado=@Resultado+(datediff(hour,@PA,@PB))
			Select @PA=@FA,@PB=@FB
			end
		else
			begin
			if @FB>@PB
				Select @PB = @FB
			end
		end
	
	fetch next from SubServicios into @FA, @FB, @Baja,@Licencia
end

close SubServicios
deallocate SubServicios

select @resultado = @resultado+(datediff(hour, @PA,@PB))
--print cast(@resultado as varchar(4))

Select @Res = @Resultado
print @resultado
return(@resultado)
GO
